Descriptive statistics are measures that summarize important features of data, often with a single number. Producing descriptive statistics is a common first step to take after cleaning and preparing a data set for analysis.

dataset <- read.delim("phages.tsv")

Mean, Median, Mode, and Range

mean(dataset$molGC...)
[1] 48.42675
# colMeans() gets the means for all columns in a data frame
# colMeans(dataset) # generates an error because not all columns have continuous data

colMeans(mtcars)
       mpg        cyl       disp         hp       drat         wt       qsec         vs         am       gear       carb 
 20.090625   6.187500 230.721875 146.687500   3.596563   3.217250  17.848750   0.437500   0.406250   3.687500   2.812500 
# rowMeans() gets the means for all rows in a data frame
rowMeans(mtcars)
          Mazda RX4       Mazda RX4 Wag          Datsun 710      Hornet 4 Drive   Hornet Sportabout             Valiant          Duster 360           Merc 240D 
           29.90727            29.98136            23.59818            38.73955            53.66455            35.04909            59.72000            24.63455 
           Merc 230            Merc 280           Merc 280C          Merc 450SE          Merc 450SL         Merc 450SLC  Cadillac Fleetwood Lincoln Continental 
           27.23364            31.86000            31.78727            46.43091            46.50000            46.35000            66.23273            66.05855 
  Chrysler Imperial            Fiat 128         Honda Civic      Toyota Corolla       Toyota Corona    Dodge Challenger         AMC Javelin          Camaro Z28 
           65.97227            19.44091            17.74227            18.81409            24.88864            47.24091            46.00773            58.75273 
   Pontiac Firebird           Fiat X1-9       Porsche 914-2        Lotus Europa      Ford Pantera L        Ferrari Dino       Maserati Bora          Volvo 142E 
           57.37955            18.92864            24.77909            24.88027            60.97182            34.50818            63.15545            26.26273 
# Get only first 6 rows
head(rowMeans(mtcars))
        Mazda RX4     Mazda RX4 Wag        Datsun 710    Hornet 4 Drive Hornet Sportabout           Valiant 
         29.90727          29.98136          23.59818          38.73955          53.66455          35.04909 
median(dataset$molGC....)
[1] 46.308
colMedians <- apply(mtcars,
        MARGIN = 2, # Operate on columns
        FUN = median
) # Use function median
colMedians
    mpg     cyl    disp      hp    drat      wt    qsec      vs      am    gear    carb 
 19.200   6.000 196.300 123.000   3.695   3.325  17.710   0.000   0.000   4.000   2.000 
range(dataset$molGC....)
[1] 22.070 72.692
max(dataset$molGC....)
[1] 72.692
min(dataset$molGC....)
[1] 22.07

Variance and standard deviation

The variance of a distribution is the average of the squared deviations (differences) from the mean. Use the built-in function var() to check variance.

var(dataset$molGC....)
[1] 123.0872

The standard deviation is the square root of the variance. Use sd() to check the standard deviation.

sd(dataset$molGC....)
[1] 11.09447

Quartiles and Interquartile Ranges

Quartiles divide a dataset into four equal parts. The first quartile (Q1) is the value below which 25% of the data falls, the second quartile (Q2) is the median, and the third quartile (Q3) is the value below which 75% of the data falls.

The interquartile range is the range between the first quartile (Q1) and the third quartile (Q3). It represents the spread of the middle 50% of the data.

# Compute for Quartiles.
q <- quantile(dataset$molGC...., )
q1 <- quantile(dataset$molGC...., 0.25)
q2 <- quantile(dataset$molGC...., 0.50) # Median
q3 <- quantile(dataset$molGC...., 0.75)

print(q)
     0%     25%     50%     75%    100% 
22.0700 39.3105 46.3080 58.5770 72.6920 
print(q1)
    25% 
39.3105 
print(q2)
   50% 
46.308 
print(q3)
   75% 
58.577 
# Get five number summary
fivenum(dataset$molGC....)
[1] 22.070 39.310 46.308 58.577 72.692
# Summary() shows the five number summary plus the mean
summary(dataset$molGC....)
   Min. 1st Qu.  Median    Mean 3rd Qu.    Max. 
  22.07   39.31   46.31   48.43   58.58   72.69 

The quantile() function also lets you check percentiles other than common ones that make up the five number summary. To find percentiles, pass a vector of percentiles to the probs argument.

quantile(dataset$molGC....,
        probs = c(0.1, 0.9)
) # get the 10th and 90th percentiles
    10%     90% 
35.2525 64.6980 

Interquartile (IQR) range is another common measure of spread. IQR is the distance between the 3rd quartile and the 1st quartile, which encompasses half the data. R has a built in IQR() fuction.

IQR(dataset$molGC....)
[1] 19.2665

The boxplots are just visual representations of the five number summary and IQR.

five_num <- fivenum(dataset$molGC....)

boxplot(dataset$molGC....)

text(x = five_num[1], adj = 2, labels = "Minimum")
text(x = five_num[2], adj = 2.3, labels = "1st Quartile")
text(x = five_num[3], adj = 3, labels = "Median")
text(x = five_num[4], adj = 2.3, labels = "3rd Quartile")
text(x = five_num[5], adj = 2, labels = "Maximum")
text(x = five_num[3], adj = c(0.5, -8), labels = "IQR", srt = 90, cex = 2)


  1. De La Salle University, Manila, Philippines, ↩︎

LS0tDQp0aXRsZTogIkRlc2NyaXB0aXZlIFN0YXRpc3RpY3MiDQphdXRob3I6IERhcGhuZSBKYW5lbHluIEwuIEdvXltEZSBMYSBTYWxsZSBVbml2ZXJzaXR5LCBNYW5pbGEsIFBoaWxpcHBpbmVzLCBkYXBobmVfamFuZWx5bl9nb0BkbHN1LmVkdS5waF0NCm91dHB1dDogaHRtbF9ub3RlYm9vaw0KLS0tDQoNCkRlc2NyaXB0aXZlIHN0YXRpc3RpY3MgYXJlIG1lYXN1cmVzIHRoYXQgc3VtbWFyaXplIGltcG9ydGFudCBmZWF0dXJlcyBvZiBkYXRhLCBvZnRlbiB3aXRoIGEgc2luZ2xlIG51bWJlci4gUHJvZHVjaW5nIGRlc2NyaXB0aXZlIHN0YXRpc3RpY3MgaXMgYSBjb21tb24gZmlyc3Qgc3RlcCB0byB0YWtlIGFmdGVyIGNsZWFuaW5nIGFuZCBwcmVwYXJpbmcgYSBkYXRhIHNldCBmb3IgYW5hbHlzaXMuDQoNCmBgYHtyfQ0KZGF0YXNldCA8LSByZWFkLmRlbGltKCJwaGFnZXMudHN2IikNCmBgYA0KDQoqKk1lYW4sIE1lZGlhbiwgTW9kZSwgYW5kIFJhbmdlKioNCg0KYGBge3J9DQptZWFuKGRhdGFzZXQkbW9sR0MuLi4pDQpgYGANCg0KYGBge3J9DQojIGNvbE1lYW5zKCkgZ2V0cyB0aGUgbWVhbnMgZm9yIGFsbCBjb2x1bW5zIGluIGEgZGF0YSBmcmFtZQ0KIyBjb2xNZWFucyhkYXRhc2V0KSAjIGdlbmVyYXRlcyBhbiBlcnJvciBiZWNhdXNlIG5vdCBhbGwgY29sdW1ucyBoYXZlIGNvbnRpbnVvdXMgZGF0YQ0KDQpjb2xNZWFucyhtdGNhcnMpDQpgYGANCg0KYGBge3J9DQojIHJvd01lYW5zKCkgZ2V0cyB0aGUgbWVhbnMgZm9yIGFsbCByb3dzIGluIGEgZGF0YSBmcmFtZQ0Kcm93TWVhbnMobXRjYXJzKQ0KYGBgDQoNCmBgYHtyfQ0KIyBHZXQgb25seSBmaXJzdCA2IHJvd3MNCmhlYWQocm93TWVhbnMobXRjYXJzKSkNCmBgYA0KDQpgYGB7cn0NCm1lZGlhbihkYXRhc2V0JG1vbEdDLi4uLikNCmBgYA0KDQpgYGB7cn0NCmNvbE1lZGlhbnMgPC0gYXBwbHkobXRjYXJzLA0KICAgICAgICBNQVJHSU4gPSAyLCAjIE9wZXJhdGUgb24gY29sdW1ucw0KICAgICAgICBGVU4gPSBtZWRpYW4NCikgIyBVc2UgZnVuY3Rpb24gbWVkaWFuDQpjb2xNZWRpYW5zDQpgYGANCg0KYGBge3J9DQpyYW5nZShkYXRhc2V0JG1vbEdDLi4uLikNCmBgYA0KDQpgYGB7cn0NCm1heChkYXRhc2V0JG1vbEdDLi4uLikNCmBgYA0KDQpgYGB7cn0NCm1pbihkYXRhc2V0JG1vbEdDLi4uLikNCmBgYA0KDQoqKlZhcmlhbmNlIGFuZCBzdGFuZGFyZCBkZXZpYXRpb24qKg0KDQpUaGUgdmFyaWFuY2Ugb2YgYSBkaXN0cmlidXRpb24gaXMgdGhlIGF2ZXJhZ2Ugb2YgdGhlIHNxdWFyZWQgZGV2aWF0aW9ucyAoZGlmZmVyZW5jZXMpIGZyb20gdGhlIG1lYW4uIFVzZSB0aGUgYnVpbHQtaW4gZnVuY3Rpb24gdmFyKCkgdG8gY2hlY2sgdmFyaWFuY2UuDQoNCmBgYHtyfQ0KdmFyKGRhdGFzZXQkbW9sR0MuLi4uKQ0KYGBgDQoNClRoZSBzdGFuZGFyZCBkZXZpYXRpb24gaXMgdGhlIHNxdWFyZSByb290IG9mIHRoZSB2YXJpYW5jZS4gVXNlIHNkKCkgdG8gY2hlY2sgdGhlIHN0YW5kYXJkIGRldmlhdGlvbi4NCg0KYGBge3J9DQpzZChkYXRhc2V0JG1vbEdDLi4uLikNCmBgYA0KDQoqKlF1YXJ0aWxlcyBhbmQgSW50ZXJxdWFydGlsZSBSYW5nZXMqKg0KDQpRdWFydGlsZXMgZGl2aWRlIGEgZGF0YXNldCBpbnRvIGZvdXIgZXF1YWwgcGFydHMuIFRoZSBmaXJzdCBxdWFydGlsZSAoUTEpIGlzIHRoZSB2YWx1ZSBiZWxvdyB3aGljaCAyNSUgb2YgdGhlIGRhdGEgZmFsbHMsIHRoZSBzZWNvbmQgcXVhcnRpbGUgKFEyKSBpcyB0aGUgbWVkaWFuLCBhbmQgdGhlIHRoaXJkIHF1YXJ0aWxlIChRMykgaXMgdGhlIHZhbHVlIGJlbG93IHdoaWNoIDc1JSBvZiB0aGUgZGF0YSBmYWxscy4NCg0KVGhlIGludGVycXVhcnRpbGUgcmFuZ2UgaXMgdGhlIHJhbmdlIGJldHdlZW4gdGhlIGZpcnN0IHF1YXJ0aWxlIChRMSkgYW5kIHRoZSB0aGlyZCBxdWFydGlsZSAoUTMpLiBJdCByZXByZXNlbnRzIHRoZSBzcHJlYWQgb2YgdGhlIG1pZGRsZSA1MCUgb2YgdGhlIGRhdGEuDQoNCmBgYHtyfQ0KIyBDb21wdXRlIGZvciBRdWFydGlsZXMuDQpxIDwtIHF1YW50aWxlKGRhdGFzZXQkbW9sR0MuLi4uLCApDQpxMSA8LSBxdWFudGlsZShkYXRhc2V0JG1vbEdDLi4uLiwgMC4yNSkNCnEyIDwtIHF1YW50aWxlKGRhdGFzZXQkbW9sR0MuLi4uLCAwLjUwKSAjIE1lZGlhbg0KcTMgPC0gcXVhbnRpbGUoZGF0YXNldCRtb2xHQy4uLi4sIDAuNzUpDQoNCnByaW50KHEpDQpwcmludChxMSkNCnByaW50KHEyKQ0KcHJpbnQocTMpDQpgYGANCg0KYGBge3J9DQojIEdldCBmaXZlIG51bWJlciBzdW1tYXJ5DQpmaXZlbnVtKGRhdGFzZXQkbW9sR0MuLi4uKQ0KYGBgDQoNCmBgYHtyfQ0KIyBTdW1tYXJ5KCkgc2hvd3MgdGhlIGZpdmUgbnVtYmVyIHN1bW1hcnkgcGx1cyB0aGUgbWVhbg0Kc3VtbWFyeShkYXRhc2V0JG1vbEdDLi4uLikNCmBgYA0KDQpUaGUgcXVhbnRpbGUoKSBmdW5jdGlvbiBhbHNvIGxldHMgeW91IGNoZWNrIHBlcmNlbnRpbGVzIG90aGVyIHRoYW4gY29tbW9uIG9uZXMgdGhhdCBtYWtlIHVwIHRoZSBmaXZlIG51bWJlciBzdW1tYXJ5LiBUbyBmaW5kIHBlcmNlbnRpbGVzLCBwYXNzIGEgdmVjdG9yIG9mIHBlcmNlbnRpbGVzIHRvIHRoZSBwcm9icyBhcmd1bWVudC4NCg0KYGBge3J9DQpxdWFudGlsZShkYXRhc2V0JG1vbEdDLi4uLiwNCiAgICAgICAgcHJvYnMgPSBjKDAuMSwgMC45KQ0KKSAjIGdldCB0aGUgMTB0aCBhbmQgOTB0aCBwZXJjZW50aWxlcw0KYGBgDQoNCkludGVycXVhcnRpbGUgKElRUikgcmFuZ2UgaXMgYW5vdGhlciBjb21tb24gbWVhc3VyZSBvZiBzcHJlYWQuIElRUiBpcyB0aGUgZGlzdGFuY2UgYmV0d2VlbiB0aGUgM3JkIHF1YXJ0aWxlIGFuZCB0aGUgMXN0IHF1YXJ0aWxlLCB3aGljaCBlbmNvbXBhc3NlcyBoYWxmIHRoZSBkYXRhLiBSIGhhcyBhIGJ1aWx0IGluIElRUigpIGZ1Y3Rpb24uDQoNCmBgYHtyfQ0KSVFSKGRhdGFzZXQkbW9sR0MuLi4uKQ0KYGBgDQoNClRoZSBib3hwbG90cyBhcmUganVzdCB2aXN1YWwgcmVwcmVzZW50YXRpb25zIG9mIHRoZSBmaXZlIG51bWJlciBzdW1tYXJ5IGFuZCBJUVIuDQoNCmBgYHtyfQ0KZml2ZV9udW0gPC0gZml2ZW51bShkYXRhc2V0JG1vbEdDLi4uLikNCg0KYm94cGxvdChkYXRhc2V0JG1vbEdDLi4uLikNCg0KdGV4dCh4ID0gZml2ZV9udW1bMV0sIGFkaiA9IDIsIGxhYmVscyA9ICJNaW5pbXVtIikNCnRleHQoeCA9IGZpdmVfbnVtWzJdLCBhZGogPSAyLjMsIGxhYmVscyA9ICIxc3QgUXVhcnRpbGUiKQ0KdGV4dCh4ID0gZml2ZV9udW1bM10sIGFkaiA9IDMsIGxhYmVscyA9ICJNZWRpYW4iKQ0KdGV4dCh4ID0gZml2ZV9udW1bNF0sIGFkaiA9IDIuMywgbGFiZWxzID0gIjNyZCBRdWFydGlsZSIpDQp0ZXh0KHggPSBmaXZlX251bVs1XSwgYWRqID0gMiwgbGFiZWxzID0gIk1heGltdW0iKQ0KdGV4dCh4ID0gZml2ZV9udW1bM10sIGFkaiA9IGMoMC41LCAtOCksIGxhYmVscyA9ICJJUVIiLCBzcnQgPSA5MCwgY2V4ID0gMikNCmBgYA==